chore(docs): fix base url paths#130
Conversation
📝 WalkthroughWalkthroughThe PR systematically normalizes internal site URLs by introducing centralized URL utilities, an HTML transform for automatic rewriting during the build pipeline, and updating all code and documentation to use absolute root-relative paths instead of relative paths. ChangesURL Normalization Infrastructure and Implementation
Sequence Diagram(s)sequenceDiagram
participant Browser
participant EleventyBuild as Eleventy Build
participant HtmlBase as HtmlBasePlugin
participant Transform as siteUrlsTransform
participant Utils as URL Utils
participant Output as HTML Output
Browser->>EleventyBuild: trigger build
EleventyBuild->>HtmlBase: render templates
HtmlBase->>EleventyBuild: inject base href
EleventyBuild->>Transform: pass generated HTML
Transform->>Utils: parse & resolve URLs
Utils->>Transform: absolute or base-relative paths
Transform->>Output: rewrite href/src attributes
EleventyBuild->>Browser: serve normalized URLs
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
projects/site/src/_11ty/layouts/docs.11ty.js (1)
50-54: 🧹 Nitpick | 🔵 Trivial | 💤 Low valueConsider simplifying the baseTabUrl construction.
The
baseTabUrlremoves the leading/on line 51 (.replace('/', '')), then lines 91, 94, and 99 add it back (href="/${baseTabUrl}"). This could be simplified by keeping the leading/inbaseTabUrl:const baseTabUrl = `${data.page.url - .replace('/', '') .replace('/api/', '/') .replace('/examples/', '/') .replace(/(.*\/data-grid\/).+/, '$1')}`;Then use it directly:
-<a href="/${baseTabUrl}">Overview</a> +<a href="${baseTabUrl}">Overview</a>This would be clearer and avoid the remove-then-add pattern.
Also applies to: 91-99
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@projects/site/src/_11ty/layouts/docs.11ty.js` around lines 50 - 54, The code builds baseTabUrl by stripping the leading '/' from data.page.url then later prepends '/' again when creating hrefs; to simplify, stop removing the leading slash: remove the initial .replace('/', '') from the baseTabUrl expression (leave data.page.url as-is when applying the subsequent .replace('/api/', '/'), .replace('/examples/', '/'), and .replace(/(.*\/data-grid\/).+/, '$1')), and update all call sites that currently do href="/${baseTabUrl}" to use href="${baseTabUrl}" (references: the baseTabUrl variable and the href usages that add '/').
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@projects/site/package.json`:
- Around line 204-211: The current package.json test task watches all source
files via the "files" array which causes tests defined in the "command" (e.g.,
metadata.test.ts, links.test.ts, site-urls.test.ts, api.test.ts) to re-run on
any src change; update the "files" array to only match test files (for example
restrict to patterns like src/**/*.{test,spec}.ts or src/**/*.test.ts and
include matching .js/.md if you have test variants) so that vitest only reruns
when test files change, leaving the "command" unchanged.
In `@projects/site/src/_11ty/layouts/links.test.ts`:
- Around line 6-9: The four regex constants RELATIVE_INTERNAL_LINK_PATTERN,
BASE_PREFIXED_INTERNAL_LINK_PATTERN, JS_RELATIVE_INTERNAL_LINK_PATTERN, and
JS_BASE_PREFIXED_INTERNAL_LINK_PATTERN only account for "./" relative paths;
update each pattern to also match one or more "../" segments so "../docs/...",
"../examples/...", and "../starters/..." are caught too — modify the group that
currently matches (?:\.\/)? to allow sequences like (?:\.\.\/|\.\/)+ or a more
concise (?:\.\.\/)*\.\/? depending on desired strictness so both single and
multi-level parent traversals are rejected for both HTML and JS forms.
In `@projects/site/src/docs/metrics/testing-and-performance.11ty.js`:
- Around line 29-32: Remove the duplicate selected attribute from the wrong tab:
the first <nve-tabs-item> that links to "/docs/metrics/" currently has selected
but the page's correct active tab is the <nve-tabs-item> for "Testing &
Performance" (the one linking to "/docs/metrics/testing-and-performance/");
remove the selected attribute from the Metrics tab so only the Testing &
Performance <nve-tabs-item> remains selected to prevent conflicting active-state
behavior.
In `@projects/site/src/docs/metrics/wireit.11ty.js`:
- Line 59: Duplicate selected attribute: remove the extra selected on the
Metrics tab so only the Wireit Explorer tab remains selected. Locate the
<nve-tabs-item> element that renders the "Metrics" tab (the tag containing "<a
href=\"/docs/metrics/\">Metrics</a>") and delete the selected attribute from
that element, leaving the selected attribute only on the "Wireit Explorer"
<nve-tabs-item>.
---
Outside diff comments:
In `@projects/site/src/_11ty/layouts/docs.11ty.js`:
- Around line 50-54: The code builds baseTabUrl by stripping the leading '/'
from data.page.url then later prepends '/' again when creating hrefs; to
simplify, stop removing the leading slash: remove the initial .replace('/', '')
from the baseTabUrl expression (leave data.page.url as-is when applying the
subsequent .replace('/api/', '/'), .replace('/examples/', '/'), and
.replace(/(.*\/data-grid\/).+/, '$1')), and update all call sites that currently
do href="/${baseTabUrl}" to use href="${baseTabUrl}" (references: the baseTabUrl
variable and the href usages that add '/').
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: ce99f9ec-a08b-4139-a9d2-571dfc979998
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (69)
projects/core/src/tabs/tabs.examples.tsprojects/site/eleventy.config.jsprojects/site/package.jsonprojects/site/src/_11ty/layouts/common.jsprojects/site/src/_11ty/layouts/docs.11ty.jsprojects/site/src/_11ty/layouts/links.test.tsprojects/site/src/_11ty/layouts/metadata.jsprojects/site/src/_11ty/layouts/page.11ty.jsprojects/site/src/_11ty/plugins/llms-txt.jsprojects/site/src/_11ty/plugins/sitemap-xml.jsprojects/site/src/_11ty/shortcodes/index.jsprojects/site/src/_11ty/templates/api.jsprojects/site/src/_11ty/transforms/anchor-generator.jsprojects/site/src/_11ty/transforms/site-urls.jsprojects/site/src/_11ty/transforms/site-urls.test.tsprojects/site/src/_11ty/utils/site-url.jsprojects/site/src/_internal/metrics-carousel/metrics-carousel.tsprojects/site/src/docs/about/contributions.mdprojects/site/src/docs/about/migration.mdprojects/site/src/docs/about/support.mdprojects/site/src/docs/api-design/logs.mdprojects/site/src/docs/api-design/packaging.mdprojects/site/src/docs/changelog/changelog.11ty.jsprojects/site/src/docs/changelog/index.11ty.jsprojects/site/src/docs/elements/dialog.mdprojects/site/src/docs/elements/drawer.mdprojects/site/src/docs/elements/dropdown.mdprojects/site/src/docs/elements/forms/index.mdprojects/site/src/docs/elements/icon.mdprojects/site/src/docs/elements/notification.mdprojects/site/src/docs/elements/page.mdprojects/site/src/docs/elements/toast.mdprojects/site/src/docs/elements/toggletip.mdprojects/site/src/docs/elements/tooltip.mdprojects/site/src/docs/foundations/iconography.mdprojects/site/src/docs/foundations/index.mdprojects/site/src/docs/foundations/layout/grid.mdprojects/site/src/docs/foundations/layout/horizontal.mdprojects/site/src/docs/foundations/layout/index.mdprojects/site/src/docs/foundations/layout/responsive/container.mdprojects/site/src/docs/foundations/layout/responsive/index.mdprojects/site/src/docs/foundations/layout/responsive/viewport.mdprojects/site/src/docs/foundations/layout/vertical.mdprojects/site/src/docs/foundations/popovers.mdprojects/site/src/docs/foundations/themes/index.11ty.jsprojects/site/src/docs/foundations/typography.mdprojects/site/src/docs/foundations/view-transitions.mdprojects/site/src/docs/integrations/angular.mdprojects/site/src/docs/integrations/index.11ty.jsprojects/site/src/docs/integrations/lit.mdprojects/site/src/docs/integrations/mcp-apps.mdprojects/site/src/docs/integrations/shortcodes.jsprojects/site/src/docs/internal/guidelines/component-creation.mdprojects/site/src/docs/internal/guidelines/testing.mdprojects/site/src/docs/metrics/api-status.11ty.jsprojects/site/src/docs/metrics/bundle-explorer.11ty.jsprojects/site/src/docs/metrics/index.11ty.jsprojects/site/src/docs/metrics/metadata.11ty.jsprojects/site/src/docs/metrics/testing-and-performance.11ty.jsprojects/site/src/docs/metrics/wireit.11ty.jsprojects/site/src/docs/monaco/diff-editor.mdprojects/site/src/docs/monaco/editor.mdprojects/site/src/docs/patterns/editor.mdprojects/site/src/docs/patterns/index.mdprojects/site/src/docs/patterns/panel.mdprojects/site/src/docs/skills/index.mdprojects/site/src/examples/examples.11ty.jsprojects/site/src/examples/index.11ty.jsprojects/site/src/index.md
| "command": "vitest run src/_11ty/layouts/metadata.test.ts src/_11ty/layouts/links.test.ts src/_11ty/transforms/site-urls.test.ts src/_11ty/shortcodes/api.test.ts", | ||
| "files": [ | ||
| "src/docs/**/*.md", | ||
| "src/_11ty/layouts/common.js", | ||
| "src/_11ty/layouts/metadata.js", | ||
| "src/_11ty/layouts/metadata.test.ts", | ||
| "src/_11ty/shortcodes/api.js", | ||
| "src/_11ty/shortcodes/api.test.ts", | ||
| "src/**/*.js", | ||
| "src/**/*.md", | ||
| "src/**/*.ts", | ||
| "vitest.config.ts" | ||
| ], | ||
| "output": [] |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial | ⚖️ Poor tradeoff
Consider narrowing the test watch patterns to test files only.
The files array now watches all source files (src/**/*.js, src/**/*.md, src/**/*.ts) rather than just test files. This means tests will re-run whenever any source file changes, not just when test files change. While this ensures tests stay fresh, it may cause unnecessary test runs during development.
If tests should only re-run when test files change, consider:
"files": [
- "src/**/*.js",
- "src/**/*.md",
- "src/**/*.ts",
+ "src/**/*.test.ts",
+ "src/**/*.test.js",
"vitest.config.ts"
],Otherwise, if the current behavior is intentional (to ensure tests run on any source change), this is fine.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| "command": "vitest run src/_11ty/layouts/metadata.test.ts src/_11ty/layouts/links.test.ts src/_11ty/transforms/site-urls.test.ts src/_11ty/shortcodes/api.test.ts", | |
| "files": [ | |
| "src/docs/**/*.md", | |
| "src/_11ty/layouts/common.js", | |
| "src/_11ty/layouts/metadata.js", | |
| "src/_11ty/layouts/metadata.test.ts", | |
| "src/_11ty/shortcodes/api.js", | |
| "src/_11ty/shortcodes/api.test.ts", | |
| "src/**/*.js", | |
| "src/**/*.md", | |
| "src/**/*.ts", | |
| "vitest.config.ts" | |
| ], | |
| "output": [] | |
| "command": "vitest run src/_11ty/layouts/metadata.test.ts src/_11ty/layouts/links.test.ts src/_11ty/transforms/site-urls.test.ts src/_11ty/shortcodes/api.test.ts", | |
| "files": [ | |
| "src/**/*.test.ts", | |
| "src/**/*.test.js", | |
| "vitest.config.ts" | |
| ], | |
| "output": [] |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/package.json` around lines 204 - 211, The current package.json
test task watches all source files via the "files" array which causes tests
defined in the "command" (e.g., metadata.test.ts, links.test.ts,
site-urls.test.ts, api.test.ts) to re-run on any src change; update the "files"
array to only match test files (for example restrict to patterns like
src/**/*.{test,spec}.ts or src/**/*.test.ts and include matching .js/.md if you
have test variants) so that vitest only reruns when test files change, leaving
the "command" unchanged.
| const RELATIVE_INTERNAL_LINK_PATTERN = /(?:href=["']|]\()(?:\.\/)?(?:docs|examples|starters)\//; | ||
| const BASE_PREFIXED_INTERNAL_LINK_PATTERN = /(?:href=["']|]\()\/elements\/(?:docs|examples|starters)\//; | ||
| const JS_RELATIVE_INTERNAL_LINK_PATTERN = /\bhref:\s*['"](?:\.\/)?(?:docs|examples|starters)\//; | ||
| const JS_BASE_PREFIXED_INTERNAL_LINK_PATTERN = /\bhref:\s*['"]\/elements\/(?:docs|examples|starters)\//; |
There was a problem hiding this comment.
Expand invalid-link regexes to catch ../ relative paths.
Line 6 and Line 8 only reject ./... relative links. ../docs/..., ../examples/..., and ../starters/... are still relative and currently bypass this test.
Suggested patch
-const RELATIVE_INTERNAL_LINK_PATTERN = /(?:href=["']|]\()(?:\.\/)?(?:docs|examples|starters)\//;
+const RELATIVE_INTERNAL_LINK_PATTERN = /(?:href=["']|]\()(?:(?:\.\.\/)+|\.\/)?(?:docs|examples|starters)\//;
...
-const JS_RELATIVE_INTERNAL_LINK_PATTERN = /\bhref:\s*['"](?:\.\/)?(?:docs|examples|starters)\//;
+const JS_RELATIVE_INTERNAL_LINK_PATTERN = /\bhref:\s*['"](?:(?:\.\.\/)+|\.\/)?(?:docs|examples|starters)\//;As per coding guidelines, “**/*.test.ts: Follow unit testing patterns ... including ... patterns” and this test should fully enforce the intended invalid-link patterns.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const RELATIVE_INTERNAL_LINK_PATTERN = /(?:href=["']|]\()(?:\.\/)?(?:docs|examples|starters)\//; | |
| const BASE_PREFIXED_INTERNAL_LINK_PATTERN = /(?:href=["']|]\()\/elements\/(?:docs|examples|starters)\//; | |
| const JS_RELATIVE_INTERNAL_LINK_PATTERN = /\bhref:\s*['"](?:\.\/)?(?:docs|examples|starters)\//; | |
| const JS_BASE_PREFIXED_INTERNAL_LINK_PATTERN = /\bhref:\s*['"]\/elements\/(?:docs|examples|starters)\//; | |
| const RELATIVE_INTERNAL_LINK_PATTERN = /(?:href=["']|]\()(?:(?:\.\.\/)+|\.\/)?(?:docs|examples|starters)\//; | |
| const BASE_PREFIXED_INTERNAL_LINK_PATTERN = /(?:href=["']|]\()\/elements\/(?:docs|examples|starters)\//; | |
| const JS_RELATIVE_INTERNAL_LINK_PATTERN = /\bhref:\s*['"](?:(?:\.\.\/)+|\.\/)?(?:docs|examples|starters)\//; | |
| const JS_BASE_PREFIXED_INTERNAL_LINK_PATTERN = /\bhref:\s*['"]\/elements\/(?:docs|examples|starters)\//; |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/_11ty/layouts/links.test.ts` around lines 6 - 9, The four
regex constants RELATIVE_INTERNAL_LINK_PATTERN,
BASE_PREFIXED_INTERNAL_LINK_PATTERN, JS_RELATIVE_INTERNAL_LINK_PATTERN, and
JS_BASE_PREFIXED_INTERNAL_LINK_PATTERN only account for "./" relative paths;
update each pattern to also match one or more "../" segments so "../docs/...",
"../examples/...", and "../starters/..." are caught too — modify the group that
currently matches (?:\.\/)? to allow sequences like (?:\.\.\/|\.\/)+ or a more
concise (?:\.\.\/)*\.\/? depending on desired strictness so both single and
multi-level parent traversals are rejected for both HTML and JS forms.
Source: Coding guidelines
| <nve-tabs-item selected><a href="/docs/metrics/">Metrics</a></nve-tabs-item> | ||
| <nve-tabs-item><a href="/docs/metrics/api-status/">API Status</a></nve-tabs-item> | ||
| <nve-tabs-item selected><a href="/docs/metrics/testing-and-performance/">Testing & Performance</a></nve-tabs-item> | ||
| <nve-tabs-item><a href="/docs/metrics/wireit/">Wireit Explorer</a></nve-tabs-item> |
There was a problem hiding this comment.
Remove duplicate selected state in the metrics tab list.
At Line 29 and Line 31, two <nve-tabs-item> entries are marked selected. Keep only the current page tab selected (Testing & Performance) to avoid conflicting active-state behavior.
Suggested fix
- <nve-tabs-item selected><a href="/docs/metrics/">Metrics</a></nve-tabs-item>
+ <nve-tabs-item><a href="/docs/metrics/">Metrics</a></nve-tabs-item>
<nve-tabs-item><a href="/docs/metrics/api-status/">API Status</a></nve-tabs-item>
<nve-tabs-item selected><a href="/docs/metrics/testing-and-performance/">Testing & Performance</a></nve-tabs-item>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <nve-tabs-item selected><a href="/docs/metrics/">Metrics</a></nve-tabs-item> | |
| <nve-tabs-item><a href="/docs/metrics/api-status/">API Status</a></nve-tabs-item> | |
| <nve-tabs-item selected><a href="/docs/metrics/testing-and-performance/">Testing & Performance</a></nve-tabs-item> | |
| <nve-tabs-item><a href="/docs/metrics/wireit/">Wireit Explorer</a></nve-tabs-item> | |
| <nve-tabs-item><a href="/docs/metrics/">Metrics</a></nve-tabs-item> | |
| <nve-tabs-item><a href="/docs/metrics/api-status/">API Status</a></nve-tabs-item> | |
| <nve-tabs-item selected><a href="/docs/metrics/testing-and-performance/">Testing & Performance</a></nve-tabs-item> | |
| <nve-tabs-item><a href="/docs/metrics/wireit/">Wireit Explorer</a></nve-tabs-item> |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/docs/metrics/testing-and-performance.11ty.js` around lines
29 - 32, Remove the duplicate selected attribute from the wrong tab: the first
<nve-tabs-item> that links to "/docs/metrics/" currently has selected but the
page's correct active tab is the <nve-tabs-item> for "Testing & Performance"
(the one linking to "/docs/metrics/testing-and-performance/"); remove the
selected attribute from the Metrics tab so only the Testing & Performance
<nve-tabs-item> remains selected to prevent conflicting active-state behavior.
| <nve-tabs-item selected><a href="docs/metrics/wireit/">Wireit Explorer</a></nve-tabs-item> | ||
| <nve-tabs-item><a href="docs/metrics/bundle-explorer/">Bundle Explorer</a></nve-tabs-item> | ||
| <nve-tabs-item><a href="docs/metrics/metadata/">Raw Metadata</a></nve-tabs-item> | ||
| <nve-tabs-item selected><a href="/docs/metrics/">Metrics</a></nve-tabs-item> |
There was a problem hiding this comment.
Remove the duplicate selected attribute.
Two tabs are marked as selected (lines 59 and 62), but only the "Wireit Explorer" tab (line 62) should be selected on this page.
🐛 Proposed fix
- <nve-tabs-item selected><a href="/docs/metrics/">Metrics</a></nve-tabs-item>
+ <nve-tabs-item><a href="/docs/metrics/">Metrics</a></nve-tabs-item>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| <nve-tabs-item selected><a href="/docs/metrics/">Metrics</a></nve-tabs-item> | |
| <nve-tabs-item><a href="/docs/metrics/">Metrics</a></nve-tabs-item> |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/docs/metrics/wireit.11ty.js` at line 59, Duplicate selected
attribute: remove the extra selected on the Metrics tab so only the Wireit
Explorer tab remains selected. Locate the <nve-tabs-item> element that renders
the "Metrics" tab (the tag containing "<a href=\"/docs/metrics/\">Metrics</a>")
and delete the selected attribute from that element, leaving the selected
attribute only on the "Wireit Explorer" <nve-tabs-item>.
- Changed internal links in documentation to use root-relative paths for consistency. - Added a new transform for site URLs to ensure correct linking in different environments. - Updated various files to reflect these changes, including configuration and layout files. - Added tests to verify that all internal links are correctly formatted. Signed-off-by: Cory Rylan <crylan@nvidia.com>
da90867 to
1339f0f
Compare
| import { | ||
| DEPLOYED_SITE_URL, | ||
| ELEMENTS_SITE_ORIGIN, | ||
| getSitePath as getBaseFreeSitePath, | ||
| getSiteHref, | ||
| getSiteUrl | ||
| } from '../utils/site-url.js'; |
There was a problem hiding this comment.
Actionable comments posted: 6
♻️ Duplicate comments (1)
projects/site/src/docs/metrics/testing-and-performance.11ty.js (1)
29-34:⚠️ Potential issue | 🟠 Major | ⚡ Quick winDuplicate
selectedattribute remains unresolved from prior review.This issue was already flagged in a previous review comment on this file: two
<nve-tabs-item>elements (lines 29 and 31) are both markedselected. Only the current page's tab (line 31, "Testing & Performance") should have theselectedattribute. Remove theselectedattribute from line 29 (Metrics tab).The URL path updates from relative to absolute root-relative are correct and properly applied.
Proposed fix
- <nve-tabs-item selected><a href="/docs/metrics/">Metrics</a></nve-tabs-item> + <nve-tabs-item><a href="/docs/metrics/">Metrics</a></nve-tabs-item> <nve-tabs-item><a href="/docs/metrics/api-status/">API Status</a></nve-tabs-item> <nve-tabs-item selected><a href="/docs/metrics/testing-and-performance/">Testing & Performance</a></nve-tabs-item>🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@projects/site/src/docs/metrics/testing-and-performance.11ty.js` around lines 29 - 34, The first nve-tabs-item element with href="/docs/metrics/" has a duplicate selected attribute that should not be there. Remove the selected attribute from the first nve-tabs-item element (Metrics tab) so that only the third nve-tabs-item element with href="/docs/metrics/testing-and-performance/" (Testing & Performance tab) retains the selected attribute, ensuring only the current page's tab is marked as selected.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@projects/site/src/_11ty/layouts/common.js`:
- Around line 132-396: In the renderDocsNav function, there are two issues to
fix. First, remove the dead code pattern in the first nve-tree-node where the
expanded attribute checks include a redundant `/./` pattern that never occurs
naturally in URLs. The check `data.page.url.includes('/./') || data.page.url ===
'/'` should be simplified to just `data.page.url === '/'` since the OR condition
with the root path already handles all necessary cases. Second, fix the path
inconsistency in the final nve-tree-node for the Internal Examples section where
the URL checks use `'examples/'` without a leading slash, but the href attribute
uses `'/examples/'` with a leading slash. Update all the URL check patterns in
this section to use `'/examples/'` with a leading slash to be consistent with
how all other navigation sections check their paths (e.g.,
`includes('/docs/...')`).
In `@projects/site/src/_11ty/transforms/site-urls.test.ts`:
- Around line 94-121: The test cases for siteUrlsTransform in the test file
currently only cover module scripts with type="module" attributes, leaving
non-module script URL rewriting behavior untested. Add test assertions within
one or both of the existing test cases (the production output test and the local
preview test) that verify the expected behavior when a regular non-module script
tag with a src attribute is processed by siteUrlsTransform. Include an assertion
that confirms the URL transformation for a non-module script follows the same
transformation rules as the other assets being tested.
In `@projects/site/src/docs/about/support.md`:
- Line 31: The Lit button on line 31 has a closing `</a>` tag without a
corresponding opening `<a>` tag, breaking the link functionality. Add an opening
`<a>` tag with href="/docs/integrations/lit/" before the svg-logo template tag
in the Lit button element to properly pair with the existing closing `</a>` tag
and match the structure of the other framework buttons (TypeScript, Angular,
Vue, Preact) which all have properly formed anchor links.
In `@projects/site/src/docs/foundations/layout/index.md`:
- Around line 102-104: The anchor reference in the link pointing to
`/docs/api-design/styles/#internal-host` is incorrect because the actual heading
in the styles documentation is `## **_REMOVED_** Host`, not `## Internal Host`.
Update the anchor portion of this link to match the actual heading structure in
the styles documentation so it resolves correctly. Verify what the actual anchor
should be based on the current heading in that document and correct the
reference accordingly.
In `@projects/site/src/docs/foundations/popovers.md`:
- Line 15: Fix the hyphenation in two compound adjectives in the popovers.md
documentation. In the tooltip link description, change "contextual text only
hints" to "contextual text-only hints" by adding a hyphen between "text" and
"only". Additionally, in the notification-related text, change "async non
contextual notification" to "async non-contextual notification" by adding a
hyphen between "non" and "contextual". These hyphens are necessary because the
adjectives modify the nouns that follow them as compound modifiers.
In `@projects/site/src/docs/internal/guidelines/testing.md`:
- Line 44: All the markdown links in the test type list (lines 41-45) are using
incorrect paths pointing to `/docs/internal/testing/*/` which doesn't exist.
Update all five links to use the correct path structure
`/docs/internal/guidelines/testing-*/` instead. Specifically, ensure line 44
updates the Visual Regression Tests link from `/docs/internal/testing/ssr/` to
`/docs/internal/guidelines/testing-visual/`, and apply similar corrections to
the other test type links on lines 41, 42, 43, and 45 by replacing the
`/docs/internal/testing/` portion with `/docs/internal/guidelines/testing-` in
each link.
---
Duplicate comments:
In `@projects/site/src/docs/metrics/testing-and-performance.11ty.js`:
- Around line 29-34: The first nve-tabs-item element with href="/docs/metrics/"
has a duplicate selected attribute that should not be there. Remove the selected
attribute from the first nve-tabs-item element (Metrics tab) so that only the
third nve-tabs-item element with href="/docs/metrics/testing-and-performance/"
(Testing & Performance tab) retains the selected attribute, ensuring only the
current page's tab is marked as selected.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Enterprise
Run ID: 457a32c4-6b74-4aa0-9cd2-6c2b9f78ef7d
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (69)
projects/core/src/tabs/tabs.examples.tsprojects/site/eleventy.config.jsprojects/site/package.jsonprojects/site/src/_11ty/layouts/common.jsprojects/site/src/_11ty/layouts/docs.11ty.jsprojects/site/src/_11ty/layouts/links.test.tsprojects/site/src/_11ty/layouts/metadata.jsprojects/site/src/_11ty/layouts/page.11ty.jsprojects/site/src/_11ty/plugins/llms-txt.jsprojects/site/src/_11ty/plugins/sitemap-xml.jsprojects/site/src/_11ty/shortcodes/index.jsprojects/site/src/_11ty/templates/api.jsprojects/site/src/_11ty/transforms/anchor-generator.jsprojects/site/src/_11ty/transforms/site-urls.jsprojects/site/src/_11ty/transforms/site-urls.test.tsprojects/site/src/_11ty/utils/site-url.jsprojects/site/src/_internal/metrics-carousel/metrics-carousel.tsprojects/site/src/docs/about/contributions.mdprojects/site/src/docs/about/migration.mdprojects/site/src/docs/about/support.mdprojects/site/src/docs/api-design/logs.mdprojects/site/src/docs/api-design/packaging.mdprojects/site/src/docs/changelog/changelog.11ty.jsprojects/site/src/docs/changelog/index.11ty.jsprojects/site/src/docs/elements/dialog.mdprojects/site/src/docs/elements/drawer.mdprojects/site/src/docs/elements/dropdown.mdprojects/site/src/docs/elements/forms/index.mdprojects/site/src/docs/elements/icon.mdprojects/site/src/docs/elements/notification.mdprojects/site/src/docs/elements/page.mdprojects/site/src/docs/elements/toast.mdprojects/site/src/docs/elements/toggletip.mdprojects/site/src/docs/elements/tooltip.mdprojects/site/src/docs/foundations/iconography.mdprojects/site/src/docs/foundations/index.mdprojects/site/src/docs/foundations/layout/grid.mdprojects/site/src/docs/foundations/layout/horizontal.mdprojects/site/src/docs/foundations/layout/index.mdprojects/site/src/docs/foundations/layout/responsive/container.mdprojects/site/src/docs/foundations/layout/responsive/index.mdprojects/site/src/docs/foundations/layout/responsive/viewport.mdprojects/site/src/docs/foundations/layout/vertical.mdprojects/site/src/docs/foundations/popovers.mdprojects/site/src/docs/foundations/themes/index.11ty.jsprojects/site/src/docs/foundations/typography.mdprojects/site/src/docs/foundations/view-transitions.mdprojects/site/src/docs/integrations/angular.mdprojects/site/src/docs/integrations/index.11ty.jsprojects/site/src/docs/integrations/lit.mdprojects/site/src/docs/integrations/mcp-apps.mdprojects/site/src/docs/integrations/shortcodes.jsprojects/site/src/docs/internal/guidelines/component-creation.mdprojects/site/src/docs/internal/guidelines/testing.mdprojects/site/src/docs/metrics/api-status.11ty.jsprojects/site/src/docs/metrics/bundle-explorer.11ty.jsprojects/site/src/docs/metrics/index.11ty.jsprojects/site/src/docs/metrics/metadata.11ty.jsprojects/site/src/docs/metrics/testing-and-performance.11ty.jsprojects/site/src/docs/metrics/wireit.11ty.jsprojects/site/src/docs/monaco/diff-editor.mdprojects/site/src/docs/monaco/editor.mdprojects/site/src/docs/patterns/editor.mdprojects/site/src/docs/patterns/index.mdprojects/site/src/docs/patterns/panel.mdprojects/site/src/docs/skills/index.mdprojects/site/src/examples/examples.11ty.jsprojects/site/src/examples/index.11ty.jsprojects/site/src/index.md
| export const renderDocsNav = data => /* html */ ` | ||
| <nve-tree id="docs-nav" data-pagefind-ignore="all" behavior-expand selectable="single"> | ||
| <nve-tree-node ${data.page.url === '/' || data.page.url.includes('/docs/metrics/') || data.page.url.includes('/docs/integrations/installation/') || data.page.url.includes('/docs/cli/') || data.page.url.includes('/docs/mcp/') || data.page.url.includes('/docs/skills/') || data.page.url.includes('/docs/lint/') ? 'expanded' : ''}> | ||
| <a href="./">Getting Started</a> | ||
| <nve-tree-node ${data.page.url.includes('/./') || data.page.url === '/' ? 'highlighted selected' : ''}><a href="./">Getting Started</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/installation/') ? 'highlighted selected' : ''}><a href="docs/integrations/installation/">Installation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/cli/') ? 'highlighted selected' : ''}><a href="docs/cli/">CLI</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/mcp/') ? 'highlighted selected' : ''}><a href="docs/mcp/">MCP</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/skills/') ? 'highlighted selected' : ''}><a href="docs/skills/">Skills</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/lint/') ? 'highlighted selected' : ''}><a href="docs/lint/">Lint</a></nve-tree-node> | ||
| <a href="/">Getting Started</a> | ||
| <nve-tree-node ${data.page.url.includes('/./') || data.page.url === '/' ? 'highlighted selected' : ''}><a href="/">Getting Started</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/installation/') ? 'highlighted selected' : ''}><a href="/docs/integrations/installation/">Installation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/cli/') ? 'highlighted selected' : ''}><a href="/docs/cli/">CLI</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/mcp/') ? 'highlighted selected' : ''}><a href="/docs/mcp/">MCP</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/skills/') ? 'highlighted selected' : ''}><a href="/docs/skills/">Skills</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/lint/') ? 'highlighted selected' : ''}><a href="/docs/lint/">Lint</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/') ? 'expanded' : ''}> | ||
| <a href="docs/integrations/">Integrations</a> | ||
| <nve-tree-node ${data.page.url.endsWith('/docs/integrations/') ? 'highlighted selected' : ''}><a href="docs/integrations/">Getting Started</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/angular/') ? 'highlighted selected' : ''}><a href="docs/integrations/angular/">Angular</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/bundles/') ? 'highlighted selected' : ''}><a href="docs/integrations/bundles/">Bundles</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/cdn/') ? 'highlighted selected' : ''}><a href="docs/integrations/cdn/">CDN</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/custom-elements/') ? 'highlighted selected' : ''}><a href="docs/integrations/custom-elements/">Custom Elements</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/go/') ? 'highlighted selected' : ''}><a href="docs/integrations/go/">Golang</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/hugo/') ? 'highlighted selected' : ''}><a href="docs/integrations/hugo/">Hugo</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/importmaps/') ? 'highlighted selected' : ''}><a href="docs/integrations/importmaps/">Import Maps</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/lit/') ? 'highlighted selected' : ''}><a href="docs/integrations/lit/">Lit</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/lit-library/') ? 'highlighted selected' : ''}><a href="docs/integrations/lit-library/">Lit Library</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/mcp-apps/') ? 'highlighted selected' : ''}><a href="docs/integrations/mcp-apps/">MCP Apps</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/nextjs/') ? 'highlighted selected' : ''}><a href="docs/integrations/nextjs/">NextJS</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/nuxt/') ? 'highlighted selected' : ''}><a href="docs/integrations/nuxt/">Nuxt</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/preact/') ? 'highlighted selected' : ''}><a href="docs/integrations/preact/">Preact</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/react/') ? 'highlighted selected' : ''}><a href="docs/integrations/react/">React</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/solidjs/') ? 'highlighted selected' : ''}><a href="docs/integrations/solidjs/">SolidJS</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/svelte/') ? 'highlighted selected' : ''}><a href="docs/integrations/svelte/">Svelte</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/typescript/') ? 'highlighted selected' : ''}><a href="docs/integrations/typescript/">TypeScript</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/vue/') ? 'highlighted selected' : ''}><a href="docs/integrations/vue/">Vue</a></nve-tree-node> | ||
| <a href="/docs/integrations/">Integrations</a> | ||
| <nve-tree-node ${data.page.url.endsWith('/docs/integrations/') ? 'highlighted selected' : ''}><a href="/docs/integrations/">Getting Started</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/angular/') ? 'highlighted selected' : ''}><a href="/docs/integrations/angular/">Angular</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/bundles/') ? 'highlighted selected' : ''}><a href="/docs/integrations/bundles/">Bundles</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/cdn/') ? 'highlighted selected' : ''}><a href="/docs/integrations/cdn/">CDN</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/custom-elements/') ? 'highlighted selected' : ''}><a href="/docs/integrations/custom-elements/">Custom Elements</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/go/') ? 'highlighted selected' : ''}><a href="/docs/integrations/go/">Golang</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/hugo/') ? 'highlighted selected' : ''}><a href="/docs/integrations/hugo/">Hugo</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/importmaps/') ? 'highlighted selected' : ''}><a href="/docs/integrations/importmaps/">Import Maps</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/lit/') ? 'highlighted selected' : ''}><a href="/docs/integrations/lit/">Lit</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/lit-library/') ? 'highlighted selected' : ''}><a href="/docs/integrations/lit-library/">Lit Library</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/mcp-apps/') ? 'highlighted selected' : ''}><a href="/docs/integrations/mcp-apps/">MCP Apps</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/nextjs/') ? 'highlighted selected' : ''}><a href="/docs/integrations/nextjs/">NextJS</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/nuxt/') ? 'highlighted selected' : ''}><a href="/docs/integrations/nuxt/">Nuxt</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/preact/') ? 'highlighted selected' : ''}><a href="/docs/integrations/preact/">Preact</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/react/') ? 'highlighted selected' : ''}><a href="/docs/integrations/react/">React</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/solidjs/') ? 'highlighted selected' : ''}><a href="/docs/integrations/solidjs/">SolidJS</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/svelte/') ? 'highlighted selected' : ''}><a href="/docs/integrations/svelte/">Svelte</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/typescript/') ? 'highlighted selected' : ''}><a href="/docs/integrations/typescript/">TypeScript</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/integrations/vue/') ? 'highlighted selected' : ''}><a href="/docs/integrations/vue/">Vue</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/metrics/') || data.page.url.includes('/docs/changelog/') || data.page.url.includes('/docs/about/') ? 'expanded' : ''}> | ||
| <a href="docs/changelog/">About</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/changelog/') ? 'highlighted selected' : ''}><a href="docs/changelog/">Changelog</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/metrics/') ? 'highlighted selected' : ''}><a href="docs/metrics/">Metrics</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/support/') ? 'highlighted selected' : ''}><a href="docs/about/support/">Support</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/accessibility/') ? 'highlighted selected' : ''}><a href="docs/about/accessibility/">Accessibility</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/contributions/') ? 'highlighted selected' : ''}><a href="docs/about/contributions/">Contributions</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/requests/') ? 'highlighted selected' : ''}><a href="docs/about/requests/">Requests</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/migration/') ? 'highlighted selected' : ''}><a href="docs/about/migration/">Migration</a></nve-tree-node> | ||
| <a href="/docs/changelog/">About</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/changelog/') ? 'highlighted selected' : ''}><a href="/docs/changelog/">Changelog</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/metrics/') ? 'highlighted selected' : ''}><a href="/docs/metrics/">Metrics</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/support/') ? 'highlighted selected' : ''}><a href="/docs/about/support/">Support</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/accessibility/') ? 'highlighted selected' : ''}><a href="/docs/about/accessibility/">Accessibility</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/contributions/') ? 'highlighted selected' : ''}><a href="/docs/about/contributions/">Contributions</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/requests/') ? 'highlighted selected' : ''}><a href="/docs/about/requests/">Requests</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/about/migration/') ? 'highlighted selected' : ''}><a href="/docs/about/migration/">Migration</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/') ? 'expanded' : ''}> | ||
| <a href="docs/foundations/">Foundations</a> | ||
| <nve-tree-node ${data.page.url.endsWith('/docs/foundations/') ? 'highlighted selected' : ''}><a href="docs/foundations/">Overview</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/typography/') ? 'highlighted selected' : ''}><a href="docs/foundations/typography/">Typography</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/iconography/') ? 'highlighted selected' : ''}><a href="docs/foundations/iconography/">Iconography</a></nve-tree-node> | ||
| <a href="/docs/foundations/">Foundations</a> | ||
| <nve-tree-node ${data.page.url.endsWith('/docs/foundations/') ? 'highlighted selected' : ''}><a href="/docs/foundations/">Overview</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/typography/') ? 'highlighted selected' : ''}><a href="/docs/foundations/typography/">Typography</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/iconography/') ? 'highlighted selected' : ''}><a href="/docs/foundations/iconography/">Iconography</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/') ? 'expanded' : ''} ${data.page.url === '/docs/foundations/themes/' ? 'highlighted' : ''}> | ||
| <a href="docs/foundations/themes/">Themes</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/tokens/') ? 'highlighted selected' : ''}><a href="docs/foundations/themes/tokens/">Design Tokens</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/size/' ? 'highlighted selected' : ''}><a href="docs/foundations/themes/size/">Size & Space</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/objects/') ? 'highlighted selected' : ''}><a href="docs/foundations/themes/objects/">Objects</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/interactions/') ? 'highlighted selected' : ''}><a href="docs/foundations/themes/interactions/">Interactions</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/support/' ? 'highlighted selected' : ''}><a href="docs/foundations/themes/support/">Support</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/status/' ? 'highlighted selected' : ''}><a href="docs/foundations/themes/status/">Status</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/color/' ? 'highlighted selected' : ''}><a href="docs/foundations/themes/color/">Color</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/animation/' ? 'highlighted selected' : ''}><a href="docs/foundations/themes/animation/">Animation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/fonts/' ? 'highlighted selected' : ''}><a href="docs/foundations/themes/fonts/">Fonts</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/layers/') ? 'highlighted selected' : ''}><a href="docs/foundations/themes/layers/">Layers</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/custom/' ? 'highlighted selected' : ''}><a href="docs/foundations/themes/custom/">Custom</a></nve-tree-node> | ||
| <a href="/docs/foundations/themes/">Themes</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/tokens/') ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/tokens/">Design Tokens</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/size/' ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/size/">Size & Space</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/objects/') ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/objects/">Objects</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/interactions/') ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/interactions/">Interactions</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/support/' ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/support/">Support</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/status/' ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/status/">Status</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/color/' ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/color/">Color</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/animation/' ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/animation/">Animation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/fonts/' ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/fonts/">Fonts</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/themes/layers/') ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/layers/">Layers</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/themes/custom/' ? 'highlighted selected' : ''}><a href="/docs/foundations/themes/custom/">Custom</a></nve-tree-node> | ||
| </nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/layout/') ? 'expanded' : ''} ${data.page.url === '/docs/foundations/layout/' ? 'highlighted' : ''}> | ||
| <a href="docs/foundations/layout/">Layout</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/layout/horizontal/') ? 'highlighted selected' : ''}><a href="docs/foundations/layout/horizontal/">Horizontal</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/layout/vertical/') ? 'highlighted selected' : ''}><a href="docs/foundations/layout/vertical/">Vertical</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/layout/grid/') ? 'highlighted selected' : ''}><a href="docs/foundations/layout/grid/">Grid</a></nve-tree-node> | ||
| <a href="/docs/foundations/layout/">Layout</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/layout/horizontal/') ? 'highlighted selected' : ''}><a href="/docs/foundations/layout/horizontal/">Horizontal</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/layout/vertical/') ? 'highlighted selected' : ''}><a href="/docs/foundations/layout/vertical/">Vertical</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/foundations/layout/grid/') ? 'highlighted selected' : ''}><a href="/docs/foundations/layout/grid/">Grid</a></nve-tree-node> | ||
| </nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/popovers/' ? 'highlighted selected' : ''}><a href="docs/foundations/popovers/">Popovers</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/i18n/' ? 'highlighted selected' : ''}><a href="docs/foundations/i18n/">i18n</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/visualization/' ? 'highlighted selected' : ''}><a href="docs/foundations/visualization/">Visualization</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/view-transitions/' ? 'highlighted selected' : ''}><a href="docs/foundations/view-transitions/">View Transitions</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/popovers/' ? 'highlighted selected' : ''}><a href="/docs/foundations/popovers/">Popovers</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/i18n/' ? 'highlighted selected' : ''}><a href="/docs/foundations/i18n/">i18n</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/visualization/' ? 'highlighted selected' : ''}><a href="/docs/foundations/visualization/">Visualization</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/foundations/view-transitions/' ? 'highlighted selected' : ''}><a href="/docs/foundations/view-transitions/">View Transitions</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/elements/') ? 'expanded' : ''}> | ||
| <a href="docs/elements/accordion/">Elements</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/accordion/') ? 'highlighted selected' : ''}><a href="docs/elements/accordion/">Accordion</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/alert/') ? 'highlighted selected' : ''}><a href="docs/elements/alert/">Alert</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/avatar/') ? 'highlighted selected' : ''}><a href="docs/elements/avatar/">Avatar</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/badge/') ? 'highlighted selected' : ''}><a href="docs/elements/badge/">Badge</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/breadcrumb/') ? 'highlighted selected' : ''}><a href="docs/elements/breadcrumb/">Breadcrumb</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/button/') ? 'highlighted selected' : ''}><a href="docs/elements/button/">Button</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/button-group/') ? 'highlighted selected' : ''}><a href="docs/elements/button-group/">Button Group</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/card/') ? 'highlighted selected' : ''}><a href="docs/elements/card/">Card</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/chat-message/') ? 'highlighted selected' : ''}><a href="docs/elements/chat-message/">Chat Message</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/checkbox/') ? 'highlighted selected' : ''}><a href="docs/elements/checkbox/">Checkbox</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/color/') ? 'highlighted selected' : ''}><a href="docs/elements/color/">Color</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/combobox/') ? 'highlighted selected' : ''}><a href="docs/elements/combobox/">Combobox</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/copy-button/') ? 'highlighted selected' : ''}><a href="docs/elements/copy-button/">Copy Button</a></nve-tree-node> | ||
| <a href="/docs/elements/accordion/">Elements</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/accordion/') ? 'highlighted selected' : ''}><a href="/docs/elements/accordion/">Accordion</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/alert/') ? 'highlighted selected' : ''}><a href="/docs/elements/alert/">Alert</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/avatar/') ? 'highlighted selected' : ''}><a href="/docs/elements/avatar/">Avatar</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/badge/') ? 'highlighted selected' : ''}><a href="/docs/elements/badge/">Badge</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/breadcrumb/') ? 'highlighted selected' : ''}><a href="/docs/elements/breadcrumb/">Breadcrumb</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/button/') ? 'highlighted selected' : ''}><a href="/docs/elements/button/">Button</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/button-group/') ? 'highlighted selected' : ''}><a href="/docs/elements/button-group/">Button Group</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/card/') ? 'highlighted selected' : ''}><a href="/docs/elements/card/">Card</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/chat-message/') ? 'highlighted selected' : ''}><a href="/docs/elements/chat-message/">Chat Message</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/checkbox/') ? 'highlighted selected' : ''}><a href="/docs/elements/checkbox/">Checkbox</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/color/') ? 'highlighted selected' : ''}><a href="/docs/elements/color/">Color</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/combobox/') ? 'highlighted selected' : ''}><a href="/docs/elements/combobox/">Combobox</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/copy-button/') ? 'highlighted selected' : ''}><a href="/docs/elements/copy-button/">Copy Button</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/') ? 'expanded' : ''} ${data.page.url.endsWith('/docs/elements/data-grid/') || data.page.url.endsWith('/docs/elements/data-grid/api/') ? 'highlighted' : ''}> | ||
| <a href="docs/elements/data-grid/">Datagrid</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/integrations/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/integrations/">Integrations</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/column-action/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/column-action/">Column Action</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/column-alignment/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/column-alignment/">Column Alignment</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/column-fixed/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/column-fixed/">Column Fixed</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/column-width/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/column-width/">Column width</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/container/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/container/">Container</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/card/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/card/">Card</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/display-settings/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/display-settings/">Display Settings</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/footer/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/footer/">Footer</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/heatmap/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/heatmap/">Heatmap</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/keynav/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/keynav/">Keynav</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/multi-select/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/multi-select/">Multi Select</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/pagination/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/pagination/">Pagination</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/panel-detail/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/panel-detail/">Panel Detail</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/panel-grid/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/panel-grid/">Panel Grid</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/performance/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/performance/">Performance</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/placeholder/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/placeholder/">Placeholder</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/row-action/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/row-action/">Row Action</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/row-groups/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/row-groups/">Row Groups</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/row-sort/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/row-sort/">Row Sort</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/scroll-height/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/scroll-height/">Scroll Height</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/single-select/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/single-select/">Single Select</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/stripe/') ? 'highlighted selected' : ''}><a href="docs/elements/data-grid/stripe/">Stripe</a></nve-tree-node> | ||
| <a href="/docs/elements/data-grid/">Datagrid</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/integrations/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/integrations/">Integrations</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/column-action/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/column-action/">Column Action</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/column-alignment/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/column-alignment/">Column Alignment</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/column-fixed/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/column-fixed/">Column Fixed</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/column-width/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/column-width/">Column width</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/container/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/container/">Container</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/card/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/card/">Card</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/display-settings/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/display-settings/">Display Settings</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/footer/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/footer/">Footer</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/heatmap/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/heatmap/">Heatmap</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/keynav/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/keynav/">Keynav</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/multi-select/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/multi-select/">Multi Select</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/pagination/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/pagination/">Pagination</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/panel-detail/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/panel-detail/">Panel Detail</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/panel-grid/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/panel-grid/">Panel Grid</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/performance/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/performance/">Performance</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/placeholder/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/placeholder/">Placeholder</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/row-action/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/row-action/">Row Action</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/row-groups/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/row-groups/">Row Groups</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/row-sort/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/row-sort/">Row Sort</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/scroll-height/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/scroll-height/">Scroll Height</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/single-select/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/single-select/">Single Select</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/data-grid/stripe/') ? 'highlighted selected' : ''}><a href="/docs/elements/data-grid/stripe/">Stripe</a></nve-tree-node> | ||
| </nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/date/') ? 'highlighted selected' : ''}><a href="docs/elements/date/">Date</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/datetime/') ? 'highlighted selected' : ''}><a href="docs/elements/datetime/">Datetime</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dialog/') ? 'highlighted selected' : ''}><a href="docs/elements/dialog/">Dialog</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/divider/') ? 'highlighted selected' : ''}><a href="docs/elements/divider/">Divider</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dot/') ? 'highlighted selected' : ''}><a href="docs/elements/dot/">Dot</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/drawer/') ? 'highlighted selected' : ''}><a href="docs/elements/drawer/">Drawer</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dropdown/') ? 'highlighted selected' : ''}><a href="docs/elements/dropdown/">Dropdown</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dropdown-group/') ? 'highlighted selected' : ''}><a href="docs/elements/dropdown-group/">Dropdown Group</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dropzone/') ? 'highlighted selected' : ''}><a href="docs/elements/dropzone/">Dropzone</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/file/') ? 'highlighted selected' : ''}><a href="docs/elements/file/">File</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/format-datetime/') ? 'highlighted selected' : ''}><a href="docs/elements/format-datetime/">Format Datetime</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/format-number/') ? 'highlighted selected' : ''}><a href="docs/elements/format-number/">Format Number</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/format-relative-time/') ? 'highlighted selected' : ''}><a href="docs/elements/format-relative-time/">Format Relative Time</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/date/') ? 'highlighted selected' : ''}><a href="/docs/elements/date/">Date</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/datetime/') ? 'highlighted selected' : ''}><a href="/docs/elements/datetime/">Datetime</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dialog/') ? 'highlighted selected' : ''}><a href="/docs/elements/dialog/">Dialog</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/divider/') ? 'highlighted selected' : ''}><a href="/docs/elements/divider/">Divider</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dot/') ? 'highlighted selected' : ''}><a href="/docs/elements/dot/">Dot</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/drawer/') ? 'highlighted selected' : ''}><a href="/docs/elements/drawer/">Drawer</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dropdown/') ? 'highlighted selected' : ''}><a href="/docs/elements/dropdown/">Dropdown</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dropdown-group/') ? 'highlighted selected' : ''}><a href="/docs/elements/dropdown-group/">Dropdown Group</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/dropzone/') ? 'highlighted selected' : ''}><a href="/docs/elements/dropzone/">Dropzone</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/file/') ? 'highlighted selected' : ''}><a href="/docs/elements/file/">File</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/format-datetime/') ? 'highlighted selected' : ''}><a href="/docs/elements/format-datetime/">Format Datetime</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/format-number/') ? 'highlighted selected' : ''}><a href="/docs/elements/format-number/">Format Number</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/format-relative-time/') ? 'highlighted selected' : ''}><a href="/docs/elements/format-relative-time/">Format Relative Time</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/forms/') || data.page.url.includes('/docs/elements/control/') ? 'expanded' : ''} ${data.page.url === '/docs/elements/forms/' ? 'highlighted' : ''}> | ||
| <a href="docs/elements/forms/">Forms</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/forms/validation/') ? 'highlighted selected' : ''}><a href="docs/elements/forms/validation/">Validation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/forms/actions/') ? 'highlighted selected' : ''}><a href="docs/elements/forms/actions/">Actions</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/control/') ? 'highlighted selected' : ''}><a href="docs/elements/control/">Control</a></nve-tree-node> | ||
| <a href="/docs/elements/forms/">Forms</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/forms/validation/') ? 'highlighted selected' : ''}><a href="/docs/elements/forms/validation/">Validation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/forms/actions/') ? 'highlighted selected' : ''}><a href="/docs/elements/forms/actions/">Actions</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/control/') ? 'highlighted selected' : ''}><a href="/docs/elements/control/">Control</a></nve-tree-node> | ||
| </nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/icon/') ? 'highlighted selected' : ''}><a href="docs/elements/icon/">Icon</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/icon-button/') ? 'highlighted selected' : ''}><a href="docs/elements/icon-button/">Icon Button</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/input/') ? 'highlighted selected' : ''}><a href="docs/elements/input/">Input</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/input-group/') ? 'highlighted selected' : ''}><a href="docs/elements/input-group/">Input Group</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/logo/') ? 'highlighted selected' : ''}><a href="docs/elements/logo/">Logo</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/menu/') ? 'highlighted selected' : ''}><a href="docs/elements/menu/">Menu</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/month/') ? 'highlighted selected' : ''}><a href="docs/elements/month/">Month</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/notification/') ? 'highlighted selected' : ''}><a href="docs/elements/notification/">Notification</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/page/') ? 'highlighted selected' : ''}><a href="docs/elements/page/">Page</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/page-header/') ? 'highlighted selected' : ''}><a href="docs/elements/page-header/">Page Header</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/page-loader/') ? 'highlighted selected' : ''}><a href="docs/elements/page-loader/">Page Loader</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/pagination/') ? 'highlighted selected' : ''}><a href="docs/elements/pagination/">Pagination</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/progressive-filter-chip/') ? 'highlighted selected' : ''}><a href="docs/elements/progressive-filter-chip/">Progressive Filter Chip</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/progress-bar/') ? 'highlighted selected' : ''}><a href="docs/elements/progress-bar/">Progress Bar</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/progress-ring/') ? 'highlighted selected' : ''}><a href="docs/elements/progress-ring/">Progress Ring</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/password/') ? 'highlighted selected' : ''}><a href="docs/elements/password/">Password</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/preferences-input/') ? 'highlighted selected' : ''}><a href="docs/elements/preferences-input/">Preferences Input</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/pulse/') ? 'highlighted selected' : ''}><a href="docs/elements/pulse/">Pulse</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/radio/') ? 'highlighted selected' : ''}><a href="docs/elements/radio/">Radio</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/range/') ? 'highlighted selected' : ''}><a href="docs/elements/range/">Range</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/resize-handle/') ? 'highlighted selected' : ''}><a href="docs/elements/resize-handle/">Resize Handle</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/search/') ? 'highlighted selected' : ''}><a href="docs/elements/search/">Search</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/select/') ? 'highlighted selected' : ''}><a href="docs/elements/select/">Select</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/skeleton/') ? 'highlighted selected' : ''}><a href="docs/elements/skeleton/">Skeleton</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/sort-button/') ? 'highlighted selected' : ''}><a href="docs/elements/sort-button/">Sort Button</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/sparkline/') ? 'highlighted selected' : ''}><a href="docs/elements/sparkline/">Sparkline</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/star-rating/') ? 'highlighted selected' : ''}><a href="docs/elements/star-rating/">Star Rating</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/steps/') ? 'highlighted selected' : ''}><a href="docs/elements/steps/">Steps</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/switch/') ? 'highlighted selected' : ''}><a href="docs/elements/switch/">Switch</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/tabs/') ? 'highlighted selected' : ''}><a href="docs/elements/tabs/">Tabs</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/tag/') ? 'highlighted selected' : ''}><a href="docs/elements/tag/">Tag</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/textarea/') ? 'highlighted selected' : ''}><a href="docs/elements/textarea/">Textarea</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/time/') ? 'highlighted selected' : ''}><a href="docs/elements/time/">Time</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/toast/') ? 'highlighted selected' : ''}><a href="docs/elements/toast/">Toast</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/toggletip/') ? 'highlighted selected' : ''}><a href="docs/elements/toggletip/">Toggletip</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/toolbar/') ? 'highlighted selected' : ''}><a href="docs/elements/toolbar/">Toolbar</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/tooltip/') ? 'highlighted selected' : ''}><a href="docs/elements/tooltip/">Tooltip</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/tree/') ? 'highlighted selected' : ''}><a href="docs/elements/tree/">Tree</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/week/') ? 'highlighted selected' : ''}><a href="docs/elements/week/">Week</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/icon/') ? 'highlighted selected' : ''}><a href="/docs/elements/icon/">Icon</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/icon-button/') ? 'highlighted selected' : ''}><a href="/docs/elements/icon-button/">Icon Button</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/input/') ? 'highlighted selected' : ''}><a href="/docs/elements/input/">Input</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/input-group/') ? 'highlighted selected' : ''}><a href="/docs/elements/input-group/">Input Group</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/logo/') ? 'highlighted selected' : ''}><a href="/docs/elements/logo/">Logo</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/menu/') ? 'highlighted selected' : ''}><a href="/docs/elements/menu/">Menu</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/month/') ? 'highlighted selected' : ''}><a href="/docs/elements/month/">Month</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/notification/') ? 'highlighted selected' : ''}><a href="/docs/elements/notification/">Notification</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/page/') ? 'highlighted selected' : ''}><a href="/docs/elements/page/">Page</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/page-header/') ? 'highlighted selected' : ''}><a href="/docs/elements/page-header/">Page Header</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/page-loader/') ? 'highlighted selected' : ''}><a href="/docs/elements/page-loader/">Page Loader</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/pagination/') ? 'highlighted selected' : ''}><a href="/docs/elements/pagination/">Pagination</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/progressive-filter-chip/') ? 'highlighted selected' : ''}><a href="/docs/elements/progressive-filter-chip/">Progressive Filter Chip</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/progress-bar/') ? 'highlighted selected' : ''}><a href="/docs/elements/progress-bar/">Progress Bar</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/progress-ring/') ? 'highlighted selected' : ''}><a href="/docs/elements/progress-ring/">Progress Ring</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/password/') ? 'highlighted selected' : ''}><a href="/docs/elements/password/">Password</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/preferences-input/') ? 'highlighted selected' : ''}><a href="/docs/elements/preferences-input/">Preferences Input</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/pulse/') ? 'highlighted selected' : ''}><a href="/docs/elements/pulse/">Pulse</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/radio/') ? 'highlighted selected' : ''}><a href="/docs/elements/radio/">Radio</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/range/') ? 'highlighted selected' : ''}><a href="/docs/elements/range/">Range</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/resize-handle/') ? 'highlighted selected' : ''}><a href="/docs/elements/resize-handle/">Resize Handle</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/search/') ? 'highlighted selected' : ''}><a href="/docs/elements/search/">Search</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/select/') ? 'highlighted selected' : ''}><a href="/docs/elements/select/">Select</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/skeleton/') ? 'highlighted selected' : ''}><a href="/docs/elements/skeleton/">Skeleton</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/sort-button/') ? 'highlighted selected' : ''}><a href="/docs/elements/sort-button/">Sort Button</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/sparkline/') ? 'highlighted selected' : ''}><a href="/docs/elements/sparkline/">Sparkline</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/star-rating/') ? 'highlighted selected' : ''}><a href="/docs/elements/star-rating/">Star Rating</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/steps/') ? 'highlighted selected' : ''}><a href="/docs/elements/steps/">Steps</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/switch/') ? 'highlighted selected' : ''}><a href="/docs/elements/switch/">Switch</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/tabs/') ? 'highlighted selected' : ''}><a href="/docs/elements/tabs/">Tabs</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/tag/') ? 'highlighted selected' : ''}><a href="/docs/elements/tag/">Tag</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/textarea/') ? 'highlighted selected' : ''}><a href="/docs/elements/textarea/">Textarea</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/time/') ? 'highlighted selected' : ''}><a href="/docs/elements/time/">Time</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/toast/') ? 'highlighted selected' : ''}><a href="/docs/elements/toast/">Toast</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/toggletip/') ? 'highlighted selected' : ''}><a href="/docs/elements/toggletip/">Toggletip</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/toolbar/') ? 'highlighted selected' : ''}><a href="/docs/elements/toolbar/">Toolbar</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/tooltip/') ? 'highlighted selected' : ''}><a href="/docs/elements/tooltip/">Tooltip</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/tree/') ? 'highlighted selected' : ''}><a href="/docs/elements/tree/">Tree</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/elements/week/') ? 'highlighted selected' : ''}><a href="/docs/elements/week/">Week</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/') ? 'expanded' : ''} ${data.page.url === '/docs/patterns/' ? 'highlighted' : ''}> | ||
| <a href="docs/patterns/">Patterns</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/authentication/') ? 'highlighted selected' : ''}><a href="docs/patterns/authentication/">Authentication</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/browse/') ? 'highlighted selected' : ''}><a href="docs/patterns/browse/">Browse</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/chat/') ? 'highlighted selected' : ''}><a href="docs/patterns/chat/">Chat</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/dashboard/') ? 'highlighted selected' : ''}><a href="docs/patterns/dashboard/">Dashboard</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/editor/') ? 'highlighted selected' : ''}><a href="docs/patterns/editor/">Editor</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/empty-states/') ? 'highlighted selected' : ''}><a href="docs/patterns/empty-states/">Empty States</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/heatmap/') ? 'highlighted selected' : ''}><a href="docs/patterns/heatmap/">Heatmap</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/keyboard-shortcut/') ? 'highlighted selected' : ''}><a href="docs/patterns/keyboard-shortcut/">Keyboard Shortcut</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/logging/') ? 'highlighted selected' : ''}><a href="docs/patterns/logging/">Logging</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/media/') ? 'highlighted selected' : ''}><a href="docs/patterns/media/">Media</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/navigation/') ? 'highlighted selected' : ''}><a href="docs/patterns/navigation/">Navigation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/onboarding/') ? 'highlighted selected' : ''}><a href="docs/patterns/onboarding/">Onboarding</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/panel/') ? 'highlighted selected' : ''}><a href="docs/patterns/panel/">Panel</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/responsive/') ? 'highlighted selected' : ''}><a href="docs/patterns/responsive/">Responsive</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/search/') ? 'highlighted selected' : ''}><a href="docs/patterns/search/">Search</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/subheader/') ? 'highlighted selected' : ''}><a href="docs/patterns/subheader/">Subheader</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/trend/') ? 'highlighted selected' : ''}><a href="docs/patterns/trend/">Trend</a></nve-tree-node> | ||
| <a href="/docs/patterns/">Patterns</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/authentication/') ? 'highlighted selected' : ''}><a href="/docs/patterns/authentication/">Authentication</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/browse/') ? 'highlighted selected' : ''}><a href="/docs/patterns/browse/">Browse</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/chat/') ? 'highlighted selected' : ''}><a href="/docs/patterns/chat/">Chat</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/dashboard/') ? 'highlighted selected' : ''}><a href="/docs/patterns/dashboard/">Dashboard</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/editor/') ? 'highlighted selected' : ''}><a href="/docs/patterns/editor/">Editor</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/empty-states/') ? 'highlighted selected' : ''}><a href="/docs/patterns/empty-states/">Empty States</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/heatmap/') ? 'highlighted selected' : ''}><a href="/docs/patterns/heatmap/">Heatmap</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/keyboard-shortcut/') ? 'highlighted selected' : ''}><a href="/docs/patterns/keyboard-shortcut/">Keyboard Shortcut</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/logging/') ? 'highlighted selected' : ''}><a href="/docs/patterns/logging/">Logging</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/media/') ? 'highlighted selected' : ''}><a href="/docs/patterns/media/">Media</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/navigation/') ? 'highlighted selected' : ''}><a href="/docs/patterns/navigation/">Navigation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/onboarding/') ? 'highlighted selected' : ''}><a href="/docs/patterns/onboarding/">Onboarding</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/panel/') ? 'highlighted selected' : ''}><a href="/docs/patterns/panel/">Panel</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/responsive/') ? 'highlighted selected' : ''}><a href="/docs/patterns/responsive/">Responsive</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/search/') ? 'highlighted selected' : ''}><a href="/docs/patterns/search/">Search</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/subheader/') ? 'highlighted selected' : ''}><a href="/docs/patterns/subheader/">Subheader</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/patterns/trend/') ? 'highlighted selected' : ''}><a href="/docs/patterns/trend/">Trend</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/code/') ? 'expanded' : ''}> | ||
| <a href="docs/code/codeblock/">Code</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/code/codeblock/') ? 'highlighted selected' : ''}><a href="docs/code/codeblock/">Codeblock</a></nve-tree-node> | ||
| <a href="/docs/code/codeblock/">Code</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/code/codeblock/') ? 'highlighted selected' : ''}><a href="/docs/code/codeblock/">Codeblock</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/') ? 'expanded' : ''}> | ||
| <a href="docs/monaco/input/">Monaco</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/input/') ? 'highlighted selected' : ''}><a href="docs/monaco/input/">Input</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/diff-input/') ? 'highlighted selected' : ''}><a href="docs/monaco/diff-input/">Diff Input</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/editor/') ? 'highlighted selected' : ''}><a href="docs/monaco/editor/">Editor</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/diff-editor/') ? 'highlighted selected' : ''}><a href="docs/monaco/diff-editor/">Diff Editor</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/problems/') ? 'highlighted selected' : ''}><a href="docs/monaco/problems/">Problems</a></nve-tree-node> | ||
| <a href="/docs/monaco/input/">Monaco</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/input/') ? 'highlighted selected' : ''}><a href="/docs/monaco/input/">Input</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/diff-input/') ? 'highlighted selected' : ''}><a href="/docs/monaco/diff-input/">Diff Input</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/editor/') ? 'highlighted selected' : ''}><a href="/docs/monaco/editor/">Editor</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/diff-editor/') ? 'highlighted selected' : ''}><a href="/docs/monaco/diff-editor/">Diff Editor</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/monaco/problems/') ? 'highlighted selected' : ''}><a href="/docs/monaco/problems/">Problems</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/markdown/') ? 'expanded' : ''}> | ||
| <a href="docs/markdown/">Markdown</a> | ||
| <nve-tree-node ${data.page.url.endsWith('/docs/markdown/') ? 'highlighted selected' : ''}><a href="docs/markdown/">Markdown</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/markdown/styles/') ? 'highlighted selected' : ''}><a href="docs/markdown/styles/">CSS Utility</a></nve-tree-node> | ||
| <a href="/docs/markdown/">Markdown</a> | ||
| <nve-tree-node ${data.page.url.endsWith('/docs/markdown/') ? 'highlighted selected' : ''}><a href="/docs/markdown/">Markdown</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/markdown/styles/') ? 'highlighted selected' : ''}><a href="/docs/markdown/styles/">CSS Utility</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/labs/') ? 'expanded' : ''} ${data.page.url === '/docs/labs/' ? 'highlighted' : ''}> | ||
| <a href="docs/labs/">Labs</a> | ||
| <a href="/docs/labs/">Labs</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/labs/layout/responsive/') ? 'expanded' : ''} ${data.page.url === '/docs/labs/layout/responsive/' ? 'highlighted' : ''}> | ||
| <a href="docs/labs/layout/responsive/" nve-layout="row align:vertical-center gap:xs">Responsive Layout <nve-icon name="beaker" size="sm"></nve-icon></a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/labs/layout/responsive/viewport/') ? 'highlighted selected' : ''}><a href="docs/labs/layout/responsive/viewport/">Viewport</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/labs/layout/responsive/container/') ? 'highlighted selected' : ''}><a href="docs/labs/layout/responsive/container/">Container</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/labs/layout/responsive/patterns/') ? 'highlighted selected' : ''}><a href="docs/labs/layout/responsive/patterns/">Patterns</a></nve-tree-node> | ||
| <a href="/docs/labs/layout/responsive/" nve-layout="row align:vertical-center gap:xs">Responsive Layout <nve-icon name="beaker" size="sm"></nve-icon></a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/labs/layout/responsive/viewport/') ? 'highlighted selected' : ''}><a href="/docs/labs/layout/responsive/viewport/">Viewport</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/labs/layout/responsive/container/') ? 'highlighted selected' : ''}><a href="/docs/labs/layout/responsive/container/">Container</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/labs/layout/responsive/patterns/') ? 'highlighted selected' : ''}><a href="/docs/labs/layout/responsive/patterns/">Patterns</a></nve-tree-node> | ||
| </nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/labs/forms/' ? 'highlighted selected' : ''}><a href="docs/labs/forms/" nve-layout="row align:vertical-center gap:xs">Forms <nve-icon name="beaker" size="sm"></nve-icon></a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/labs/forms/' ? 'highlighted selected' : ''}><a href="/docs/labs/forms/" nve-layout="row align:vertical-center gap:xs">Forms <nve-icon name="beaker" size="sm"></nve-icon></a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/') ? 'expanded' : ''} ${data.page.url === '/docs/api-design/' ? 'highlighted' : ''}> | ||
| <a href="docs/api-design/">API Design</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/properties-attributes/') ? 'highlighted selected' : ''}><a href="docs/api-design/properties-attributes/">Properties & Attributes</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/slots/') ? 'highlighted selected' : ''}><a href="docs/api-design/slots/">Slots</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/registration/') ? 'highlighted selected' : ''}><a href="docs/api-design/registration/">Registration</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/custom-events/') ? 'highlighted selected' : ''}><a href="docs/api-design/custom-events/">CustomEvents</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/stateless/') ? 'highlighted selected' : ''}><a href="docs/api-design/stateless/">Stateless</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/composition/') ? 'highlighted selected' : ''}><a href="docs/api-design/composition/">Composition</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/styles/') ? 'highlighted selected' : ''}><a href="docs/api-design/styles/">Styles</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/packaging/') ? 'highlighted selected' : ''}><a href="docs/api-design/packaging/">Packaging</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/glossary/') ? 'highlighted selected' : ''}><a href="docs/api-design/glossary/">Glossary</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/logs/') ? 'highlighted selected' : ''}><a href="docs/api-design/logs/">Logs</a></nve-tree-node> | ||
| <a href="/docs/api-design/">API Design</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/properties-attributes/') ? 'highlighted selected' : ''}><a href="/docs/api-design/properties-attributes/">Properties & Attributes</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/slots/') ? 'highlighted selected' : ''}><a href="/docs/api-design/slots/">Slots</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/registration/') ? 'highlighted selected' : ''}><a href="/docs/api-design/registration/">Registration</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/custom-events/') ? 'highlighted selected' : ''}><a href="/docs/api-design/custom-events/">CustomEvents</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/stateless/') ? 'highlighted selected' : ''}><a href="/docs/api-design/stateless/">Stateless</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/composition/') ? 'highlighted selected' : ''}><a href="/docs/api-design/composition/">Composition</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/styles/') ? 'highlighted selected' : ''}><a href="/docs/api-design/styles/">Styles</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/packaging/') ? 'highlighted selected' : ''}><a href="/docs/api-design/packaging/">Packaging</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/glossary/') ? 'highlighted selected' : ''}><a href="/docs/api-design/glossary/">Glossary</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/api-design/logs/') ? 'highlighted selected' : ''}><a href="/docs/api-design/logs/">Logs</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines') ? 'expanded' : ''} ${data.page.url === '/docs/internal/guidelines/' ? 'highlighted' : ''}> | ||
| <a href="docs/internal/guidelines/agent-harness/">Internal Guidelines</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/agent-harness/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/agent-harness/">Agent Harness</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/agent-tooling/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/agent-tooling/">Agent Tooling</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/agent-ownership/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/agent-ownership/">Agent Ownership</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/documentation/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/documentation/">Documentation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/examples/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/examples/">Examples</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/typescript/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/typescript/">TypeScript</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/internal/guidelines/testing/' ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/testing/">Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-unit/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/testing-unit/">Unit Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-accessibility/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/testing-accessibility/">Accessibility Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-lighthouse/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/testing-lighthouse/">Lighthouse Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-ssr/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/testing-ssr/">SSR Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-visual/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/testing-visual/">Visual Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/troubleshooting/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/troubleshooting/">Troubleshooting</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/component-creation/') ? 'highlighted selected' : ''}><a href="docs/internal/guidelines/component-creation/">Component Creation</a></nve-tree-node> | ||
| <a href="/docs/internal/guidelines/agent-harness/">Internal Guidelines</a> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/agent-harness/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/agent-harness/">Agent Harness</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/agent-tooling/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/agent-tooling/">Agent Tooling</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/agent-ownership/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/agent-ownership/">Agent Ownership</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/documentation/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/documentation/">Documentation</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/examples/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/examples/">Examples</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/typescript/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/typescript/">TypeScript</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url === '/docs/internal/guidelines/testing/' ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/testing/">Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-unit/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/testing-unit/">Unit Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-accessibility/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/testing-accessibility/">Accessibility Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-lighthouse/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/testing-lighthouse/">Lighthouse Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-ssr/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/testing-ssr/">SSR Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/testing-visual/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/testing-visual/">Visual Testing</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/troubleshooting/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/troubleshooting/">Troubleshooting</a></nve-tree-node> | ||
| <nve-tree-node ${data.page.url.includes('/docs/internal/guidelines/component-creation/') ? 'highlighted selected' : ''}><a href="/docs/internal/guidelines/component-creation/">Component Creation</a></nve-tree-node> | ||
| </nve-tree-node> | ||
|
|
||
| <nve-tree-node ${data.page.url.includes('examples/') ? 'expanded' : ''} ${data.page.url === 'examples/' ? 'highlighted' : ''}> | ||
| <a href="examples/">Internal Examples</a> | ||
| <nve-tree-node ${data.page.url.includes('examples/') ? 'highlighted selected' : ''}><a href="examples/">All Examples</a></nve-tree-node> | ||
| <a href="/examples/">Internal Examples</a> | ||
| <nve-tree-node ${data.page.url.includes('examples/') ? 'highlighted selected' : ''}><a href="/examples/">All Examples</a></nve-tree-node> |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
find . -name "common.js" -path "*/_11ty/layouts/*" 2>/dev/null | head -5Repository: NVIDIA/elements
Length of output: 103
🏁 Script executed:
fd "common.js" projects/site/src/_11ty/layouts/ 2>/dev/nullRepository: NVIDIA/elements
Length of output: 101
🏁 Script executed:
find projects -name "common.js" 2>/dev/null | grep layoutsRepository: NVIDIA/elements
Length of output: 101
🏁 Script executed:
ls -la projects/site/src/_11ty/layouts/ 2>/dev/nullRepository: NVIDIA/elements
Length of output: 670
🏁 Script executed:
find . -type f -name "*.js" | grep -i "common" | head -10Repository: NVIDIA/elements
Length of output: 883
🏁 Script executed:
rg "renderDocsNav" --type js -l 2>/dev/nullRepository: NVIDIA/elements
Length of output: 146
🏁 Script executed:
rg "export const renderDocsNav" -A 5 2>/dev/nullRepository: NVIDIA/elements
Length of output: 1158
🏁 Script executed:
find projects -type f \( -name "*.js" -o -name "*.ts" \) | head -20Repository: NVIDIA/elements
Length of output: 704
🏁 Script executed:
ls -la projects/ 2>/dev/nullRepository: NVIDIA/elements
Length of output: 1020
🏁 Script executed:
rg "data.page.url.includes\('\\/\\.\\/'" 2>/dev/nullRepository: NVIDIA/elements
Length of output: 41
🏁 Script executed:
rg "data.page.url.includes.*\\.\\/" -A 2 -B 2 2>/dev/nullRepository: NVIDIA/elements
Length of output: 41
🏁 Script executed:
git ls-files | grep -i "common.js" 2>/dev/null | head -5Repository: NVIDIA/elements
Length of output: 101
🏁 Script executed:
rg "nve-tree-node.*examples/" -C 3 2>/dev/nullRepository: NVIDIA/elements
Length of output: 2708
🏁 Script executed:
rg "Getting Started.*Installation.*CLI" -l 2>/dev/nullRepository: NVIDIA/elements
Length of output: 41
🏁 Script executed:
git ls-files | wc -l && git ls-files | head -30Repository: NVIDIA/elements
Length of output: 939
🏁 Script executed:
rg "data\.page\.url\.includes\('/\./'\)" 2>/dev/nullRepository: NVIDIA/elements
Length of output: 256
🏁 Script executed:
rg "/\\./|/\./" 2>/dev/null | head -20Repository: NVIDIA/elements
Length of output: 256
🏁 Script executed:
rg "Datagrid.*Column Action" 2>/dev/null | head -5Repository: NVIDIA/elements
Length of output: 41
🏁 Script executed:
rg "Internal Examples.*All Examples" 2>/dev/nullRepository: NVIDIA/elements
Length of output: 41
🏁 Script executed:
cat .gitignore 2>/dev/null | head -20Repository: NVIDIA/elements
Length of output: 362
🏁 Script executed:
ls -la | head -20Repository: NVIDIA/elements
Length of output: 1249
🏁 Script executed:
pwd && ls -R | head -100Repository: NVIDIA/elements
Length of output: 1720
🏁 Script executed:
git log --name-only --pretty="" | grep common.js | head -5Repository: NVIDIA/elements
Length of output: 269
🏁 Script executed:
git ls-files "**/common.js"Repository: NVIDIA/elements
Length of output: 101
🏁 Script executed:
rg "renderDocsNav" 2>/dev/nullRepository: NVIDIA/elements
Length of output: 361
🏁 Script executed:
rg "nve-tree-node" -l 2>/dev/null | head -10Repository: NVIDIA/elements
Length of output: 520
🏁 Script executed:
rg "Patterns.*Authentication" -l 2>/dev/nullRepository: NVIDIA/elements
Length of output: 118
🏁 Script executed:
find . -type f -name "*.html" -o -name "*.hbs" -o -name "*.njk" 2>/dev/null | head -20Repository: NVIDIA/elements
Length of output: 998
🏁 Script executed:
rg -g "*.js" "export const" 2>/dev/null | grep -i "nav\|render" | head -10Repository: NVIDIA/elements
Length of output: 233
🏁 Script executed:
python3 - <<'PY'
import os
import subprocess
try:
result = subprocess.run(['git', 'ls-files'], capture_output=True, text=True, timeout=5)
files = result.stdout.strip().split('\n')
candidates = [f for f in files if 'common' in f.lower() or 'nav' in f.lower() or '_11ty' in f]
for f in candidates[:30]:
print(f)
except Exception as e:
print(f"Error: {e}")
PYRepository: NVIDIA/elements
Length of output: 1572
🏁 Script executed:
rg "Agent Harness" -C 2 2>/dev/null | head -20Repository: NVIDIA/elements
Length of output: 1603
🏁 Script executed:
git status 2>/dev/null | head -10Repository: NVIDIA/elements
Length of output: 413
🏁 Script executed:
git log --oneline --all 2>/dev/null | head -10Repository: NVIDIA/elements
Length of output: 621
🏁 Script executed:
find . -type f | wc -l && find . -type f -name "*.js" | wc -lRepository: NVIDIA/elements
Length of output: 72
🏁 Script executed:
cat -n projects/site/src/_11ty/layouts/common.js | sed -n '130,400p'Repository: NVIDIA/elements
Length of output: 40809
🏁 Script executed:
wc -l projects/site/src/_11ty/layouts/common.jsRepository: NVIDIA/elements
Length of output: 105
🏁 Script executed:
sed -n '132,145p' projects/site/src/_11ty/layouts/common.jsRepository: NVIDIA/elements
Length of output: 1612
🏁 Script executed:
sed -n '390,410p' projects/site/src/_11ty/layouts/common.jsRepository: NVIDIA/elements
Length of output: 1353
🏁 Script executed:
grep -n "data.page.url.includes('/\./'" projects/site/src/_11ty/layouts/common.jsRepository: NVIDIA/elements
Length of output: 218
🏁 Script executed:
grep -n "examples/" projects/site/src/_11ty/layouts/common.jsRepository: NVIDIA/elements
Length of output: 582
🏁 Script executed:
grep -B 5 -A 5 "/\./" projects/site/src/_11ty/layouts/common.jsRepository: NVIDIA/elements
Length of output: 1455
🏁 Script executed:
sed -n '132,155p' projects/site/src/_11ty/layouts/common.js | cat -nRepository: NVIDIA/elements
Length of output: 3494
🏁 Script executed:
sed -n '388,398p' projects/site/src/_11ty/layouts/common.js | cat -nRepository: NVIDIA/elements
Length of output: 1339
🏁 Script executed:
git log -p --follow -S "/\./" -- projects/site/src/_11ty/layouts/common.js 2>/dev/null | head -100Repository: NVIDIA/elements
Length of output: 41
🏁 Script executed:
grep -n "data.page.url" projects/site/src/_11ty/layouts/common.js | head -20Repository: NVIDIA/elements
Length of output: 3503
🏁 Script executed:
python3 - <<'PY'
import re
with open('projects/site/src/_11ty/layouts/common.js', 'r') as f:
lines = f.readlines()
# Look at lines around the /./ pattern
start = 135
end = 145
print("=== Lines around /\./ pattern ===")
for i in range(start-1, min(end, len(lines))):
print(f"{i+1}: {lines[i]}", end='')
print("\n=== Lines around examples/ pattern ===")
start = 388
end = 398
for i in range(start-1, min(end, len(lines))):
print(f"{i+1}: {lines[i]}", end='')
# Check all selection patterns
print("\n=== All data.page.url pattern checks (sample) ===")
for i, line in enumerate(lines, 1):
if 'data.page.url' in line and ('includes' in line or 'endsWith' in line or '===' in line):
print(f"{i}: {line.strip()[:100]}")
if i > 160: # Only show first few
break
PYRepository: NVIDIA/elements
Length of output: 5107
Remove dead /./ pattern and fix examples/ path inconsistency.
Line 136 contains redundant logic: data.page.url.includes('/./') || data.page.url === '/'. The /./ pattern never occurs naturally in URLs and serves no purpose—the fallback check data.page.url === '/' already handles the root path case. Remove the dead code.
Lines 394–396 have a path mismatch: the URL checks use examples/ (no leading slash), but the href uses /examples/ (with leading slash). This breaks navigation highlighting when users visit /examples/. All other navigation items consistently check paths with leading slashes (e.g., includes('/docs/...')). Update the checks to use '/examples/' with a leading slash.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/_11ty/layouts/common.js` around lines 132 - 396, In the
renderDocsNav function, there are two issues to fix. First, remove the dead code
pattern in the first nve-tree-node where the expanded attribute checks include a
redundant `/./` pattern that never occurs naturally in URLs. The check
`data.page.url.includes('/./') || data.page.url === '/'` should be simplified to
just `data.page.url === '/'` since the OR condition with the root path already
handles all necessary cases. Second, fix the path inconsistency in the final
nve-tree-node for the Internal Examples section where the URL checks use
`'examples/'` without a leading slash, but the href attribute uses
`'/examples/'` with a leading slash. Update all the URL check patterns in this
section to use `'/examples/'` with a leading slash to be consistent with how all
other navigation sections check their paths (e.g., `includes('/docs/...')`).
| it('should preserve source module urls when building production output', async () => { | ||
| const { siteUrlsTransform } = await importTransform('build'); | ||
| const html = ` | ||
| <script type="module" src="https://nvidia.github.io/elements/404/index.ts"></script> | ||
| <img src="/static/images/integrations/angular.svg" alt="Angular logo"> | ||
| `; | ||
|
|
||
| const result = await siteUrlsTransform.call(createContext(), html, 'index.html'); | ||
|
|
||
| expect(result).toContain('src="/404/index.ts"'); | ||
| expect(result).toContain('src="https://nvidia.github.io/elements/static/images/integrations/angular.svg"'); | ||
| }); | ||
|
|
||
| it('should preserve source module urls when building for local preview', async () => { | ||
| const { siteUrlsTransform } = await importTransform('build', { | ||
| localPreview: true, | ||
| pagesBaseUrl: '/elements/preview/' | ||
| }); | ||
| const html = ` | ||
| <script type="module" src="https://nvidia.github.io/elements/preview/404/index.ts"></script> | ||
| <img src="/static/images/integrations/angular.svg" alt="Angular logo"> | ||
| `; | ||
|
|
||
| const result = await siteUrlsTransform.call(createContext(), html, 'index.html'); | ||
|
|
||
| expect(result).toContain('src="/404/index.ts"'); | ||
| expect(result).toContain('src="/elements/preview/static/images/integrations/angular.svg"'); | ||
| }); |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial | ⚡ Quick win
Add an explicit non-module <script src> case.
Current assertions cover module scripts only. Add one non-module script test to lock expected behavior around script URL rewriting.
Suggested test addition
it('should preserve source module urls when building for local preview', async () => {
@@
expect(result).toContain('src="/404/index.ts"');
expect(result).toContain('src="/elements/preview/static/images/integrations/angular.svg"');
});
+
+ it('should define behavior for non-module script src urls', async () => {
+ const { siteUrlsTransform } = await importTransform('build');
+ const html = '<script src="/docs/runtime.js"></script>';
+ const result = await siteUrlsTransform.call(createContext(), html, 'index.html');
+ expect(result).toContain('<script src="/docs/runtime.js"></script>');
+ });🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/_11ty/transforms/site-urls.test.ts` around lines 94 - 121,
The test cases for siteUrlsTransform in the test file currently only cover
module scripts with type="module" attributes, leaving non-module script URL
rewriting behavior untested. Add test assertions within one or both of the
existing test cases (the production output test and the local preview test) that
verify the expected behavior when a regular non-module script tag with a src
attribute is processed by siteUrlsTransform. Include an assertion that confirms
the URL transformation for a non-module script follows the same transformation
rules as the other assets being tested.
| <a href="/docs/integrations/typescript/">{% svg-logo 'typescript' '18' %} TypeScript</a> | ||
| </nve-button> | ||
| <nve-button> | ||
| {% svg-logo 'lit' '20' %} Lit</a> |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify HTML structure in support.md around the Lit button
fd -e md 'support.md' | xargs grep -n "svg-logo 'lit'" -A 1 -B 1Repository: NVIDIA/elements
Length of output: 257
🏁 Script executed:
sed -n '20,40p' projects/site/src/docs/about/support.md | cat -nRepository: NVIDIA/elements
Length of output: 988
🏁 Script executed:
# Check if a lit integration page exists
find projects/site/src/docs/integrations -name "*lit*" 2>/dev/null
# Check the file against Vale prose linter rules for the .md file
if command -v vale &> /dev/null; then
vale projects/site/src/docs/about/support.md 2>&1 | grep -A 2 -B 2 "line 31"
else
echo "Vale not available in sandbox"
fiRepository: NVIDIA/elements
Length of output: 183
Fix malformed HTML: Lit button is missing opening <a> tag.
Line 31 has {% svg-logo 'lit' '20' %} Lit</a> with a closing </a> tag but no opening <a href="..."> tag. This breaks HTML structure and removes the link functionality. All other framework buttons (TypeScript, Angular, Vue, Preact) have properly paired anchor tags. Since /docs/integrations/lit.md exists, add the corresponding link: <a href="/docs/integrations/lit/">.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/docs/about/support.md` at line 31, The Lit button on line
31 has a closing `</a>` tag without a corresponding opening `<a>` tag, breaking
the link functionality. Add an opening `<a>` tag with
href="/docs/integrations/lit/" before the svg-logo template tag in the Lit
button element to properly pair with the existing closing `</a>` tag and match
the structure of the other framework buttons (TypeScript, Angular, Vue, Preact)
which all have properly formed anchor links.
| Apply the `nve-layout` attribute to **native HTML elements** rather than Elements components. Use semantic HTML elements like `<section>`, `<main>`, `<nav>`, `<aside>`, or generic containers like `<div>` as your layout containers. Similarly, [form components have built-in layout capabilities](/docs/elements/forms/#form-layouts). | ||
|
|
||
| For more details, see the documentation on the [internal-host pattern](/elements/docs/api-design/styles/#internal-host) and [slots](/elements/docs/api-design/slots/) which the library uses in development, as well as [MDN docs](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) on the Shadow DOM. | ||
| For more details, see the documentation on the [internal-host pattern](/docs/api-design/styles/#internal-host) and [slots](/docs/api-design/slots/) which the library uses in development, as well as [MDN docs](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM) on the Shadow DOM. |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify that referenced documentation pages exist
echo "Checking /docs/elements/forms documentation..."
fd -t f 'forms' projects/site/src/docs/elements --max-depth 2
echo "Checking /docs/api-design documentation..."
fd -t f 'styles\|slots' projects/site/src/docs/api-design --max-depth 2Repository: NVIDIA/elements
Length of output: 149
🏁 Script executed:
#!/bin/bash
# Check the actual structure of the docs directory
echo "=== Directory structure of projects/site/src/docs ==="
ls -la projects/site/src/docs
echo ""
echo "=== Subdirectories ==="
find projects/site/src/docs -maxdepth 2 -type d | head -20
echo ""
echo "=== All markdown files in docs ==="
find projects/site/src/docs -name "*.md" -type f | sortRepository: NVIDIA/elements
Length of output: 11550
🏁 Script executed:
#!/bin/bash
# Check the actual content at lines 102-104 of the file
echo "=== Content at lines 102-104 of index.md ==="
sed -n '100,110p' projects/site/src/docs/foundations/layout/index.md
echo ""
echo "=== Broader context: lines 90-115 ==="
sed -n '90,115p' projects/site/src/docs/foundations/layout/index.mdRepository: NVIDIA/elements
Length of output: 2481
🏁 Script executed:
#!/bin/bash
# Check for form-layouts heading/anchor in forms documentation
echo "=== Checking for 'form-layouts' in forms/index.md ==="
grep -n "form-layout\|Form Layout" projects/site/src/docs/elements/forms/index.md
echo ""
echo "=== Checking for 'internal-host' in api-design/styles.md ==="
grep -n "internal-host\|Internal Host" projects/site/src/docs/api-design/styles.md
echo ""
echo "=== Full content of forms/index.md to verify structure ==="
wc -l projects/site/src/docs/elements/forms/index.md
head -100 projects/site/src/docs/elements/forms/index.mdRepository: NVIDIA/elements
Length of output: 2787
🏁 Script executed:
#!/bin/bash
# Check the full content of styles.md for internal-host
echo "=== Content of api-design/styles.md ==="
cat projects/site/src/docs/api-design/styles.mdRepository: NVIDIA/elements
Length of output: 15668
Fix incorrect anchor reference in documentation link.
The link /docs/api-design/styles/#internal-host on line 103 is broken. The styles documentation uses the heading ## **_REMOVED_** Host, not ## Internal Host, so the anchor would not resolve to #internal-host. Verify and correct the anchor reference to match the actual heading structure in that document.
The other two references are correct:
/docs/elements/forms/#form-layoutsmatches the heading## Form layouts/docs/api-design/slots/points to an existing page
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/docs/foundations/layout/index.md` around lines 102 - 104,
The anchor reference in the link pointing to
`/docs/api-design/styles/#internal-host` is incorrect because the actual heading
in the styles documentation is `## **_REMOVED_** Host`, not `## Internal Host`.
Update the anchor portion of this link to match the actual heading structure in
the styles documentation so it resolves correctly. Verify what the actual anchor
should be based on the current heading in that document and correct the
reference accordingly.
| - [toast](./docs/elements/toast/): contextual notification | ||
| - [notification](./docs/elements/notification/): async non contextual notification | ||
| - [drawer](./docs/elements/drawer/): interactive navigation or extra contextual content | ||
| - [tooltip](/docs/elements/tooltip/): contextual text only hints |
There was a problem hiding this comment.
Fix hyphenation in compound adjectives.
Two lines contain compound adjectives that should be hyphenated:
- Line 15: "contextual text only hints" → "contextual text-only hints"
- Line 20: "async non contextual notification" → "async non-contextual notification"
When adjectives modify nouns, they should be hyphenated for clarity.
Grammar fixes
- [tooltip](/docs/elements/tooltip/): contextual text only hints
+ [tooltip](/docs/elements/tooltip/): contextual text-only hints
- [notification](/docs/elements/notification/): async non contextual notification
+ [notification](/docs/elements/notification/): async non-contextual notificationAlso applies to: 20-20
🧰 Tools
🪛 LanguageTool
[grammar] ~15-~15: Use a hyphen to join words.
Context: ...docs/elements/tooltip/): contextual text only hints - [toggletip](/docs/elements/...
(QB_NEW_EN_HYPHEN)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/docs/foundations/popovers.md` at line 15, Fix the
hyphenation in two compound adjectives in the popovers.md documentation. In the
tooltip link description, change "contextual text only hints" to "contextual
text-only hints" by adding a hyphen between "text" and "only". Additionally, in
the notification-related text, change "async non contextual notification" to
"async non-contextual notification" by adding a hyphen between "non" and
"contextual". These hyphens are necessary because the adjectives modify the
nouns that follow them as compound modifiers.
Source: Linters/SAST tools
| - [Unit Tests (`.test.ts`)](/docs/internal/testing/unit/): Standard behavior tests. | ||
| - [Accessibility Tests (`.test.axe.ts`)](/docs/internal/testing/accessibility/): best practices tests using axe-core. | ||
| - [Lighthouse Performance Tests (`.test.lighthouse.ts`)](/docs/internal/testing/lighthouse/): performance audits and best practices via Lighthouse | ||
| - [Visual Regression Tests (`.test.visual.ts`)](/docs/internal/testing/ssr/): Visual regression tests using Playwright screenshots. |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check if a dedicated visual regression testing page exists
fd -e md 'visual' projects/site/src/docs/internal/testing --type f
# List all testing subdirectories
find projects/site/src/docs/internal/testing -maxdepth 1 -type dRepository: NVIDIA/elements
Length of output: 261
🏁 Script executed:
#!/bin/bash
# Find the testing.md file mentioned in the review
fd -i testing.md --type f
# Explore the docs directory structure
find . -type d -name "docs" | head -5
find . -type d -name "testing" | head -10Repository: NVIDIA/elements
Length of output: 1145
🏁 Script executed:
#!/bin/bash
# Read the testing.md file around lines 44-45
cat -n projects/site/src/docs/internal/guidelines/testing.md | sed -n '40,50p'
# Explore the docs/internal directory structure
find projects/site/src/docs/internal -maxdepth 2 -type d | sortRepository: NVIDIA/elements
Length of output: 841
🏁 Script executed:
#!/bin/bash
# List all subdirectories under docs/internal
find projects/site/src/docs/internal -type d | sort
# Specifically look for testing-related directories
ls -la projects/site/src/docs/internal/ 2>/dev/null || echo "Directory not found"
# Check if there's a testing directory
ls -la projects/site/src/docs/internal/testing 2>/dev/null || echo "testing dir not found"Repository: NVIDIA/elements
Length of output: 385
🏁 Script executed:
#!/bin/bash
# Search for any testing-related markdown files in the docs directory
find projects/site/src/docs -name "*.md" -type f | xargs grep -l "test\|Test" | head -20
# Check the structure of the entire docs/internal directory
tree projects/site/src/docs/internal 2>/dev/null || find projects/site/src/docs/internal -type f
# Search for any ssr or visual related content in docs
find projects/site/src/docs -type f \( -name "*ssr*" -o -name "*visual*" \)Repository: NVIDIA/elements
Length of output: 1760
🏁 Script executed:
#!/bin/bash
# Check the content of the testing-visual.md and testing-ssr.md files to understand the structure
cat -n projects/site/src/docs/internal/guidelines/testing-visual.md | head -10
cat -n projects/site/src/docs/internal/guidelines/testing-ssr.md | head -10
# Search for how other links are formatted in the testing.md file
cat -n projects/site/src/docs/internal/guidelines/testing.md | head -50
# Check if there's any documentation about the link format in the repo
grep -r "docs/internal/" projects/site/src/docs --include="*.md" | head -5Repository: NVIDIA/elements
Length of output: 3161
🏁 Script executed:
#!/bin/bash
# Verify the link pattern by checking a known correct link
# Search for how the unit testing link is rendered/served
grep -r "/docs/internal/testing/unit" projects/site/src --include="*.ts" --include="*.js" --include="*.11ty.js" 2>/dev/null | head -5
# Check if there's a routing or layout file that explains how these paths map to files
find projects/site/src -name "*.11ty.js" -o -name "*.config.*" | xargs grep -l "docs\|testing" 2>/dev/null | head -10
# Check the front matter or config in testing-visual.md for its served path
head -20 projects/site/src/docs/internal/guidelines/testing-visual.md
# Check the front matter in testing-ssr.md for its served path
head -20 projects/site/src/docs/internal/guidelines/testing-ssr.mdRepository: NVIDIA/elements
Length of output: 1482
🏁 Script executed:
#!/bin/bash
# Check if there's documentation on how URLs are routed in this 11ty site
cat projects/site/src/_11ty/layouts/docs.11ty.js | grep -A 10 -B 10 "url\|path\|permalink" | head -40
# Look for any routing configuration
find projects/site -name ".eleventy.js" -o -name "eleventy.config.js" | xargs cat 2>/dev/null | head -100Repository: NVIDIA/elements
Length of output: 5608
Fix all incorrect link paths in test type list (lines 41-45).
The links in lines 41-45 all point to /docs/internal/testing/*/ but this directory doesn't exist. The actual documentation files are in /docs/internal/guidelines/testing-*.md and should link to /docs/internal/guidelines/testing-*/. Line 44 should link to /docs/internal/guidelines/testing-visual/, not /docs/internal/testing/ssr/.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@projects/site/src/docs/internal/guidelines/testing.md` at line 44, All the
markdown links in the test type list (lines 41-45) are using incorrect paths
pointing to `/docs/internal/testing/*/` which doesn't exist. Update all five
links to use the correct path structure `/docs/internal/guidelines/testing-*/`
instead. Specifically, ensure line 44 updates the Visual Regression Tests link
from `/docs/internal/testing/ssr/` to
`/docs/internal/guidelines/testing-visual/`, and apply similar corrections to
the other test type links on lines 41, 42, 43, and 45 by replacing the
`/docs/internal/testing/` portion with `/docs/internal/guidelines/testing-` in
each link.
Summary by CodeRabbit
Bug Fixes
New Features
href/srcduring site generation.